from fastapi import FastAPI
from pydantic import BaseModel  # 导入Pydantic模型基类
import uvicorn

# 1. 创建FastAPI应用实例
app = FastAPI()


# 2. 定义Pydantic模型（结构化JSON的schema）
# 字段类型支持：str、int、float、bool、list、dict、Optional（可选）等
class UserData(BaseModel):
    username: str  # 必选字段，字符串类型
    age: int  # 必选字段，整数类型
    email: str  # 必选字段，字符串（可通过EmailStr验证邮箱格式，需额外安装pydantic[email-validator]）
    is_active: bool = True  # 可选字段，默认值True
    hobbies: list[str] = []  # 可选字段，默认空列表


# 3. 定义接口，用模型作为参数接收JSON
@app.post("/receive-json")  # 用POST方法（JSON数据通常放在请求体，POST/PUT/PATCH适合）
async def receive_json(user_info: UserData):  # 参数类型指定为Pydantic模型
    # user_info 已自动解析为模型实例，可通过属性访问字段（如 user_info.username）
    print(user_info)
    return {
        "status": "success",
        "message": "JSON数据接收成功",
        "received_data": {
            "username": user_info.username,
            "age": user_info.age,
            "email": user_info.email,
            "is_active": user_info.is_active,
            "hobbies": user_info.hobbies,
        },
    }


if __name__ == "__main__":
    uvicorn.run(
        app,
        host="0.0.0.0",
        port=9988,
        timeout_keep_alive=10,  # 保持连接时间（秒）
    )
